package project.model;

import io.swagger.v3.oas.annotations.media.Schema;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Schema(description = "通用响应体")
public class Response<T> {
    @Schema(description = "状态码", example = "200")
    private int code;

    @Schema(description = "提示信息", example = "Success")
    private String message;

    @Schema(description = "返回的数据")
    private T data;

    // 快速生成成功响应
    public static <T> Response<T> success(T data) {
        return Response.<T>builder()
                .code(200)
                .message("Success")
                .data(data)
                .build();
    }
    // 通用失败响应（自定义状态码和消息）
    public static <T> Response<T> fail(int code, String message) {
        return Response.<T>builder()
                .code(code)
                .message(message)
                .data(null) // 失败时 data 通常为 null 或可选的错误详情
                .build();
    }
    // 客户端错误（400 Bad Request）
    public static <T> Response<T> badRequest(String message) {
        return fail(400, message);
    }

    // 资源未找到（404 Not Found）
    public static <T> Response<T> notFound(String message) {
        return fail(404, message);
    }

    // 服务端错误（500 Internal Error）
    public static <T> Response<T> serverError(String message) {
        return fail(500, message);
    }

    // 身份验证失败（401 Unauthorized）
    public static <T> Response<T> unauthorized(String message) {
        return fail(401, message);
    }
}
